# python打印所有关键字列表
import keyword

print(keyword.kwlist)

# 计算容器型数据变量的长度

# 集合的成员不重复
jihe = {1, 1, 2, 3, 4, 4, 5, }
print(len(jihe))

# 字典是键值对
zidian = {"name": "soya", "age": 22}
print(zidian)
print(type(zidian))

# 列表/元组 里面啥数据类型都能放
list1 = [1, 3, "soya"]
yes = True
tuple1 = (1, 5, 8, yes)
# print(list1)
print(tuple1)

# 容器类型的数据：字符串 列表 元组 集合 字典
# ctr+alt+l 自动规范代码


# format 输出简化写法
name = "yifei"
age = 22
height = 167
print(f"我的名字是{name},我的年龄是{age},我的身高是{height}。")

# 输入
# input函数会让程序挂起，如果不按回车程序会一直卡住，获取到的数据均为字符串类型
# num1=input("请输入您的密码:")
# print(f"您输入的密码是{num1}")
#
# print(type(eval(num1)))

str1 = "xHuh xuSh ajih jix"
# 1.查找索引 从左/从右查找
print(str1.index("a"))
print(str1.rindex("i"))
# 2.统计次数
print(str1.count("x"))

# 3.替换 但不会修改原数据
str2 = str1.replace("a", "*")
print(str1)
print(str2)

# 4.切片分割，方法操作完之后返回一个列表里面是切片完的数据
print(str1.split("h"))
print(str1.split("h", 2))

# 5.大写转小写 首字母默认大写
print(str1.capitalize())
# 6.空格自动识别单词首字母大写
print(str1.title())

# 7.是否以某个元素开头或结尾 返回布尔值
print(str1.startswith("xH"))
print(str1.endswith("jix"))

str2="   aDc uyHJJ xxj  "

# 8.去除字符串前后空格
print(str2.strip())
print(str2.rstrip())
print(str2.lstrip())
print(str2.replace(" ",""))

# 9.判断字符串是否由纯数字组成
str3="279688539"
print(str3.isdigit())
print(str2.isdigit())

# 10.字符拼接操作
print("-".join(str3))

# 删除数据
list1 = ["晴天", "彭于晏", "吴彦祖", "刘亦菲", "胡歌"]
print(list1)
# 1.使用pop方法进行删除
print(list1[2])
name = list1.pop(1)  # 默认删除最后一个数据, 也可以通过索引指定删除
print(list1)
print(list1[2])
print(name)

# 2.使用remove方法指定删除具体某个元素
print(list1)
list1.remove("吴彦祖")
print(list1)
list1 = ["晴天", "彭于晏", "吴彦祖", "刘亦菲", "胡歌"]

# 3.使用关键字del删除
del list1[3]
print(list1)

# 4.使用clear清空列表
print(list1)
list1.clear()
print(list1)

# 增加数据
list1 = ["晴天", "彭于晏", "吴彦祖", "刘亦菲", "胡歌"]
print(list1)
# 添加单个元素
list1.append("陈冠希")
print(list1)

# 添加多个元素，将整个列表添加成一个元素
list1.append(["杨紫", "肖战"])
print(list1)

# 2,使用extend方法拆分添加，前提是容器类型的数据
list1.extend(["杨紫2", "肖战2"])
print(list1)
# 列表嵌套取值
print(list1[6][1])
list1.extend("abjsaiodjsaiodjisa")
print(list1)
list1.extend((1, 2, 3, 5, 6, 7, 4, 1))
print(list1)

# 元组一旦初始化后续不可修改
t1 = 1, 123, 3, 22, 12, 3, 5, 7, 8, 5, 3, 12, 3
print(t1[3])
print(t1[3:6])
print(t1)
# 常用的方法:统计次数以及获取下标
print(t1.count(3))
# 通过具体元素值获取索引
print(t1.index(12))
print(t1.index(5))

# 字典-查询数据
dict1 = {"name": "天秋", "age": 18, "sex": "男"}
# 通过字典的键取值:key:value
print(dict1["age"])
print(dict1["sex"])
print(dict1["name"])
# 获取字典中所有的键
print(dict1.keys())
# 获取字典中所有的值
print(dict1.values())
# 获取字典中所有的键值对
print(dict1.items())

# 字典-增加数据
# 快速创建一个字典
dict2 = dict(a=1, b=2, c=3)
print(dict2)
# print(type(dict2))
dict2.update({"d": 4})
print(dict2)
dict2.update({"d": 4, "e": 5, "f": 6})
print(dict2)
# 如果键值对时, 键存在会覆盖键对应的原来的值
dict2.update({"d": 44, "e": 55, "f": 66})
print(dict2)
# 如果字典中存在这个键, 那么使用默认值, 不会进行覆盖
dict2.setdefault("a", 666)
print(dict2)
# 如果字典中不存在这个键, 那么会新增键值对
dict2.setdefault("h", 888)
print(dict2)

# 字典-修改数据
dict3 = {'a': 1, 'b': 2, 'c': 3, 'd': 44, 'e': 55, 'f': 66, 'h': 888}
# 通过键修改值
dict3["d"] = 666
print(dict3)

# 字典-删除数据
dict2 = {'a': 1, 'b': 2, 'c': 3, 'd': 44, 'e': 55, 'f': 66, 'h': 888}
# 通过键删除键值对
dict2.pop("f")
print(dict2)
# clear清空字典的所有键值对
dict2.clear()
print(dict2)

#集合
set1 = {1, 2, 3, 1, 2, 2, 3, 1, 2, 3, 12, 1, 2, 1, 2}
print(set1)
# 集合中添加以存在的数据无效
set1.add(1)
set1.add(13)
print(set1)
# 删除数据
set1.remove(2)
print(set1)

# 列表元组集合可以相互转换
list1 = ["21", "1", "a", "b", 1, 2, 3, 1, 4, 6, 7, 1, 2, 3, 1, 2]
print(list1)
# 列表转集合:给列表去重
# 先转集合再转回列表
# print(set(list1))
# print(list(set(list1)))
# 列表转元组
print(tuple(list1))
# set() 转集合
# tuple() # 转元组
# list() # 转列表




